#pragma once //保证头文件只被包含一次

#include <assert.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

#define BUFFER_SIZE 1024

typedef enum sync_mode {
    SYNC_NOW = (1 << 0), //无缓冲
    SYNC_LINE = (1 << 1), //行缓冲
    SYNC_FULL = (1 << 2) //全缓冲
}sync_mode;

typedef struct _FILE {
    sync_mode flags; //同步模式
    int fileno; //文件描述符
    int capacity; //缓冲区的容量
    int size; //缓冲区当前使用量
    char buffer[BUFFER_SIZE]; //缓冲区
}_FILE;

_FILE* _fopen(const char* path, const char* mode);
void _fclose(_FILE* fp);
void _fflush(_FILE* fp); //强制刷新缓冲区
void _fwrite(const void* ptr, size_t num, _FILE* fp);